/*
 * MyColumnCellRenderer.java
 * Copyright 2010 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 18/04/2010, 11:22:10 PM
 */


package com.ufps.cuatro.util.render;

import java.awt.Component;
import java.io.Serializable;

import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

import com.ufps.cuatro.util.Utileria;

/**
 * <i><b>MyColumnCellRenderer:</b></i> @DefinicionClase
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 18/04/2010
 * @see JComponent
 * @see TableCellRenderer
 * @see Serializable
 */
public class MyColumnCellRenderer extends JComponent implements TableCellRenderer, Serializable {

    /**
     * @DefinicionAtributo
     */
    protected static final String label = Utileria.leerRecursoTexto("Utileria.msg.no.disponible");
    /**
     * @DefinicionAtributo
     */
    protected static final String labelButtonPropiedad = Utileria.leerRecursoTexto("Utileria.label.button.table.propiedad");
    /**
     * @DefinicionAtributo
     */
    protected static final String labelButtonEvento = Utileria.leerRecursoTexto("Utileria.label.button.table.evento");
    private static final long serialVersionUID = 5680477658423818410L;
    private Object obj;
    /**
     * @DefinicionAtributo
     */
    public final static int MODO_REPRESENTACION = 0;
    /**
     * @DefinicionAtributo
     */
    public final static int MODO_DISTRIBUCION = 1;
    private int modo;
    

    /**
     * @DefinicionMetodo
     * @param modo @DefinicionParametro
     */
    public MyColumnCellRenderer(int modo) {
        this.modo = modo;
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        try{
            switch(modo){
                case MODO_REPRESENTACION:
    //                if(value instanceof ObjetoGenerador){
    //                    ObjetoGenerador objGenerador = (ObjetoGenerador) value;
    //                    this.obj = objGenerador;
    //                    if (column == 1) {
    //                        if(objGenerador.getObjCaso() instanceof CasoField ||
    //                                objGenerador.getObjCaso() instanceof CasoMethod ||
    //                                objGenerador.getObjCaso() instanceof CasoParam ||
    //                                objGenerador.getObjCaso() instanceof CasoSimple ||
    //                                objGenerador.getObjCaso() instanceof CasoReturn){
    //                            MyButtonRenderer objButton = new MyButtonRenderer(labelButtonPropiedad, objGenerador);
    //                            return objButton;
    //                        }
    //                    }
    //                    else if(column == 3){
    //                        return new MyButtonRenderer(MyColumnCellRenderer.labelButtonEvento, objGenerador);
    //                    }
    //                }
                    break;
                case MODO_DISTRIBUCION:
                    try{                    
                        if(column == 1){
                            Boolean objBoolean = (value != null) ? (Boolean) value : false;
                            boolean valor = objBoolean.booleanValue();
                            return new MyCheckBoxRenderer(valor ? "Incluido" : "No Incluido", valor);
                        }
                    }catch(java.lang.Exception ex){
                        return new MyCheckBoxRenderer("Error Desconocido", false);
                    }
                    break;
            }               
            return this.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        }catch (java.lang.StackOverflowError ex){}
        return null;
    }

//    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
//        switch(modo){
//            case MODO_REPRESENTACION:
//                //se obtiene el objeto
//                ObjetoGenerador objGenerador = (ObjetoGenerador) table.getValueAt(row, 1);
//                if(objGenerador != null){
//                    this.obj = objGenerador;
//                    if (column == 1) {
//                        if(objGenerador.getObjCaso() instanceof CasoField){
//                            CasoField objCaso = (CasoField) objGenerador.getObjCaso();
//                            if(objCaso.geteControl() == TipoControl.eButton){
//                                MyButtonRenderer objButton = new MyButtonRenderer(labelButtonPropiedad, objGenerador);
//                                return objButton;
//                            }
//                            else if(objCaso.geteControl() == TipoControl.eCombo){
//                                if(objCaso.geteCaso() == TipoCaso.ePrimitivo ||
//                                        objCaso.geteCaso() == TipoCaso.eEnumeracion ||
//                                        objCaso.geteCaso() == TipoCaso.eJDKRegistrado){
//                                    MyComboBoxRenderer objCombo = new MyComboBoxRenderer(objGenerador, objCaso.getObjControles().toArray());
//                                    return objCombo;
//                                }
//                                else{
//                                    MyLabelRenderer objLabel = new MyLabelRenderer(label);
//                                    return objLabel;
//                                }
//                            }
//                            else if(objCaso.geteControl() == TipoControl.eLabel){
//                                MyLabelRenderer objLabel = new MyLabelRenderer(label);
//                                return objLabel;
//                            }
//                            else{
//                                MyLabelRenderer objLabel = new MyLabelRenderer("Error");
//                                return objLabel;
//                            }
//                        }
//                        else if(objGenerador.getObjCaso() instanceof CasoMethod){
//                            CasoMethod objCaso = (CasoMethod) objGenerador.getObjCaso();
//                            if(objCaso.isSet()){
//                                CasoParam objCasoParam = (CasoParam) objCaso.getObjGeneradorParam().getObjCaso();
//                                if(objCasoParam.geteControl() == TipoControl.eButton){
//                                    MyButtonRenderer objButton = new MyButtonRenderer(labelButtonPropiedad, objGenerador);
//                                    return objButton;
//                                }
//                                else if(objCasoParam.geteControl() == TipoControl.eCombo){
//                                    if(objCasoParam.geteCaso() == TipoCaso.ePrimitivo ||
//                                            objCasoParam.geteCaso() == TipoCaso.eEnumeracion ||
//                                            objCasoParam.geteCaso() == TipoCaso.eJDKRegistrado){
//                                        MyComboBoxRenderer objCombo = new MyComboBoxRenderer(objGenerador, objCasoParam.getObjControles().toArray());
//                                        return objCombo;
//                                    }
//                                    else{
//                                        MyLabelRenderer objLabel = new MyLabelRenderer("Error");
//                                        return objLabel;
//                                    }
//                                }
//                                else if(objCasoParam.geteControl() == TipoControl.eLabel){
//                                    MyLabelRenderer objLabel = new MyLabelRenderer(label);
//                                    return objLabel;
//                                }
//                                else{
//                                    MyLabelRenderer objLabel = new MyLabelRenderer("Error");
//                                    return objLabel;
//                                }
//                            }
//                            else{
//                                if(objCaso.geteControl() == TipoControl.eButton){
//                                    MyButtonRenderer objButton = new MyButtonRenderer(labelButtonPropiedad, objGenerador);
//                                    return objButton;
//                                }
//                                else if(objCaso.geteControl() == TipoControl.eCombo){
//                                    if(objCaso.geteCaso() == TipoCaso.ePrimitivo ||
//                                            objCaso.geteCaso() == TipoCaso.eEnumeracion ||
//                                            objCaso.geteCaso() == TipoCaso.eJDKRegistrado){
//                                        MyComboBoxRenderer objCombo = new MyComboBoxRenderer(objGenerador, objCaso.getObjControles().toArray());
//                                        return objCombo;
//                                    }
//                                    else{
//                                        MyLabelRenderer objLabel = new MyLabelRenderer(label);
//                                        return objLabel;
//                                    }
//                                }
//                                else if(objCaso.geteControl() == TipoControl.eLabel){
//                                    MyLabelRenderer objLabel = new MyLabelRenderer(label);
//                                    return objLabel;
//                                }
//                                else{
//                                    MyLabelRenderer objLabel = new MyLabelRenderer("Error");
//                                    return objLabel;
//                                }
//                            }
//                        }
//                        else if(objGenerador.getObjCaso() instanceof CasoParam){
//                            CasoParam objCaso = (CasoParam) objGenerador.getObjCaso();
//                            if(objCaso.geteControl() == TipoControl.eButton){
//                                MyButtonRenderer objButton = new MyButtonRenderer(labelButtonPropiedad, objGenerador);
//                                return objButton;
//                            }
//                            else if(objCaso.geteControl() == TipoControl.eCombo){
//                                if(objCaso.geteCaso() == TipoCaso.ePrimitivo ||
//                                        objCaso.geteCaso() == TipoCaso.eEnumeracion ||
//                                        objCaso.geteCaso() == TipoCaso.eJDKRegistrado){
//                                    MyComboBoxRenderer objCombo = new MyComboBoxRenderer(objGenerador, objCaso.getObjControles().toArray());
//                                    return objCombo;
//                                }
//                                else{
//                                    MyLabelRenderer objLabel = new MyLabelRenderer(label);
//                                    return objLabel;
//                                }
//                            }
//                            else if(objCaso.geteControl() == TipoControl.eLabel){
//                                MyLabelRenderer objLabel = new MyLabelRenderer(label);
//                                return objLabel;
//                            }
//                            else{
//                                MyLabelRenderer objLabel = new MyLabelRenderer("Error");
//                                return objLabel;
//                            }
//                        }
//                        else if(objGenerador.getObjCaso() instanceof CasoSimple){
//                            CasoSimple objCaso = (CasoSimple) objGenerador.getObjCaso();
//                            if(objCaso.geteControl() == TipoControl.eButton){
//                                MyButtonRenderer objButton = new MyButtonRenderer(labelButtonPropiedad, objGenerador);
//                                return objButton;
//                            }
//                            else if(objCaso.geteControl() == TipoControl.eCombo){
//                                if(objCaso.geteCaso() == TipoCaso.ePrimitivo ||
//                                        objCaso.geteCaso() == TipoCaso.eEnumeracion ||
//                                        objCaso.geteCaso() == TipoCaso.eJDKRegistrado){
//                                    MyComboBoxRenderer objCombo = new MyComboBoxRenderer(objGenerador, objCaso.getObjControles().toArray());
//                                    return objCombo;
//                                }
//                                else{
//                                    MyLabelRenderer objLabel = new MyLabelRenderer(label);
//                                    return objLabel;
//                                }
//                            }
//                            else if(objCaso.geteControl() == TipoControl.eLabel){
//                                MyLabelRenderer objLabel = new MyLabelRenderer(label);
//                                return objLabel;
//                            }
//                            else{
//                                MyLabelRenderer objLabel = new MyLabelRenderer("Error");
//                                return objLabel;
//                            }
//                        }
//                        else{
//                            MyLabelRenderer objLabel = new MyLabelRenderer(label);
//                            return objLabel;
//                        }
//                    }
//                    else if(column == 3){
//                        return new MyButtonRenderer(MyColumnCellRenderer.labelButtonEvento, objGenerador);
//                    }
//                }
//                break;
//            case MODO_DISTRIBUCION:
//                try{
//                    if(column == 1){
//                        Boolean objBoolean = value != null ? (Boolean) value : new Boolean(false);
//                        boolean valor = objBoolean.booleanValue();
//                        return new MyCheckBoxRenderer(valor ? "Incluido" : "No Incluido", valor);
//                    }
//                }catch(java.lang.Exception ex){
//                    return new MyCheckBoxRenderer("Error Desconocido", false);
//                }
//                break;
//        }
//
//        return this.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
//    }

}
